class Trap {
  public int trap(int[] height) {

    int ans = 0;
    int left = 0;
    int right = height.length - 1;
    int preMax = 0; // 前缀最大值，随着左指针 left 的移动而更新
    int sufMax = 0; // 后缀最大值，随着右指针 right 的移动而更新
    while (left < right) {
        preMax = Math.max(preMax, height[left]);
        sufMax = Math.max(sufMax, height[right]);
        ans += preMax < sufMax ? preMax - height[left++] : sufMax - height[right--];
    }
    return ans;

  }

  public static void main(String[] args) {
    int[] height = {0,1,0,2,1,0,1,3,2,1,2,1};
    Trap trap = new Trap();
    int result = trap.trap(height);
    System.out.println(result); // 6
  }
}


// 示例：

// 输入：[0,1,0,2,1,0,1,3,2,1,2,1]
// 输出：6